library(tidyverse)
Warning: package ‘tidyverse’ was built under R version 4.2.3Warning: package ‘ggplot2’ was built under R version 4.2.3Warning: package ‘tibble’ was built under R version 4.2.3Warning: package ‘tidyr’ was built under R version 4.2.3Warning: package ‘readr’ was built under R version 4.2.3Warning: package ‘purrr’ was built under R version 4.2.3Warning: package ‘dplyr’ was built under R version 4.2.3Warning: package ‘forcats’ was built under R version 4.2.3Warning: package ‘lubridate’ was built under R version 4.2.3── Attaching core tidyverse packages ──────────────────────────────────────────────────────────────────────────────────────────────────── tidyverse 2.0.0 ──
✔ dplyr     1.1.2     ✔ readr     2.1.4
✔ forcats   1.0.0     ✔ stringr   1.5.0
✔ ggplot2   3.4.2     ✔ tibble    3.2.1
✔ lubridate 1.9.2     ✔ tidyr     1.3.0
✔ purrr     1.0.1     ── Conflicts ────────────────────────────────────────────────────────────────────────────────────────────────────────────────────── tidyverse_conflicts() ──
✖ dplyr::filter() masks stats::filter()
✖ dplyr::lag()    masks stats::lag()
ℹ Use the ]8;;http://conflicted.r-lib.org/conflicted package]8;; to force all conflicts to become errors
library(CodeClanData)

Attaching package: ‘CodeClanData’

The following object is masked from ‘package:dplyr’:

    starwars

The following object is masked from ‘package:tidyr’:

    population
library(plotly)
Warning: package ‘plotly’ was built under R version 4.2.3
Attaching package: ‘plotly’

The following object is masked from ‘package:ggplot2’:

    last_plot

The following object is masked from ‘package:stats’:

    filter

The following object is masked from ‘package:graphics’:

    layout
game_sales
game_sales %>% 
  group_by(publisher, year_of_release) %>% 
  summarise(num_games_released = n()) %>% 
  plot_ly(x = ~ year_of_release,
          y = ~ num_games_released,
          color = ~ publisher,
          mode = "lines", 
          text = ~ publisher,
          hovertemplate = '<b>%{text}',
          showlegend = F) %>% 
  highlight(on = "plotly_hover")
`summarise()` has grouped output by 'publisher'. You can override using the `.groups` argument.No trace type specified:
  Based on info supplied, a 'scatter' trace seems appropriate.
  Read more about this trace type -> https://plotly.com/r/reference/#scatter
Warning: n too large, allowed maximum for palette Set2 is 8
Returning the palette you asked for with that many colors
Warning: n too large, allowed maximum for palette Set2 is 8
Returning the palette you asked for with that many colors
No trace type specified:
  Based on info supplied, a 'scatter' trace seems appropriate.
  Read more about this trace type -> https://plotly.com/r/reference/#scatter
Warning: n too large, allowed maximum for palette Set2 is 8
Returning the palette you asked for with that many colors
Warning: n too large, allowed maximum for palette Set2 is 8
Returning the palette you asked for with that many colors
game_sales %>% 
  group_by(publisher) %>% 
  summarise(avg_rating = mean(user_score)) %>% 
  ggplot(aes(reorder(publisher, avg_rating), avg_rating)) +
  geom_col() +
  theme(axis.text.x = element_text(angle = 45, hjust = 1))

game_sales %>% 
  filter(publisher == "Nintendo") %>% 
  group_by(name) %>% 
  summarise(user_score = mean(user_score),
            critic_score = mean(critic_score)/10) %>% 
  arrange(desc(user_score)) %>% 
  slice_head(n = 10) %>% 
  pivot_longer(user_score:critic_score, names_to = "reviewer", values_to = "score") %>% 
  ggplot() +
  geom_col(aes(x = reorder(name, -score), y = score, fill = reviewer),
           position = "dodge",
           #fill = "lavenderblush2"
  ) +
  # geom_point(aes(x = name, y = critic_score),
  #            #position = "dodge",
  #            colour = "deeppink2") +
  theme(axis.text.x = element_text(angle = 45, hjust = 1),
        panel.grid = element_blank()) +
  labs(
    title = "Top 10 Games Released by Selected Publisher",
    x = "",
    y = "Rating"
  )

game_sales %>% 
  group_by(publisher, platform) %>% 
  summarise(total_games = n()) %>% 
  ggplot(aes(publisher, total_games, fill = platform)) +
  geom_col() +
  theme(axis.text.x = element_text(angle = 45, hjust = 1))
`summarise()` has grouped output by 'publisher'. You can override using the `.groups` argument.

game_sales <- game_sales %>% 
  mutate(platform_cat = case_when(
    str_detect(platform, "PS") ~ "Playstation",
    str_detect(platform, "X") ~ "Xbox",
    str_detect(platform, "Wii") ~ "Nintendo Wii",
    str_detect(platform, "GC") ~ "Nintendo Gamecube",
    str_detect(platform, "GB") ~ "Nintendo Game Boy",
    str_detect(platform, "DS") ~ "Nintendo DS",
    .default = platform
  ))
game_sales %>% 
  group_by(publisher, platform_cat) %>% 
  summarise(total_games = n()) %>% 
  ggplot(aes(reorder(publisher, -total_games, sum), total_games, fill = platform_cat)) +
  geom_col() +
  theme(axis.text.x = element_text(angle = 45, hjust = 1)) +
  scale_fill_manual(values = c(
    "Xbox" = "darkgreen",
    "Playstation" = "blue",
    "Nintendo Gamecube" = "red1",
    "Nintendo DS" = "red2",
    "Nintendo Wii" = "red3",
    "Nintendo Game Boy" = "red4",
    "PC" = "black")
  )
`summarise()` has grouped output by 'publisher'. You can override using the `.groups` argument.

Games by publisher

colour_scheme <- c(
    "Xbox" = "darkgreen",
    "Playstation" = "blue",
    "Nintendo Gamecube" = "red1",
    "Nintendo DS" = "red2",
    "Nintendo Wii" = "red3",
    "Nintendo Game Boy" = "red4",
    "PC" = "black")

game_sales %>% 
  group_by(publisher, platform_cat) %>% 
  summarise(total_games = n()) %>% 
  plot_ly(y = ~ reorder(publisher, total_games, sum),
          x = ~ total_games,
          color = ~ platform_cat,
          colors = colour_scheme,
          type = "bar"
          ) %>% 
          layout(barmode = "stack",
                 title = "Number of Games Released by Publisher Across Each Platform",
                 yaxis = list(title = ""),
                 xaxis = list(title = "Number of Games released")
                 )
`summarise()` has grouped output by 'publisher'. You can override using the `.groups` argument.

game_sales <- game_sales %>% 
  mutate(
    platform_cat = factor(
      case_when(
        str_detect(platform, "PS") ~ "Playstation",
        str_detect(platform, "X") ~ "Xbox",
        str_detect(platform, "Wii|GC|GB|DS") ~ "Nintendo",
        .default = platform
      )
    )
  )

game_sales %>% 
  filter(publisher == "Activision") %>% 
  group_by(year_of_release, platform_cat, .drop = FALSE) %>% 
  summarise(total_games_plat = n()) %>% 
  ungroup() %>% 
  group_by(year_of_release) %>% 
  mutate(total_games = sum(total_games_plat)) %>% 
  ggplot() +
  geom_line(aes(year_of_release, total_games_plat, colour = platform_cat)) +
  geom_point(aes(year_of_release, total_games_plat, colour = platform_cat))+
  geom_line(aes(year_of_release, total_games, colour = "Total")) +
  geom_point(aes(year_of_release, total_games, colour = "Total"))
`summarise()` has grouped output by 'year_of_release'. You can override using the `.groups` argument.

  theme_classic()
List of 97
 $ line                      :List of 6
  ..$ colour       : chr "black"
  ..$ linewidth    : num 0.5
  ..$ linetype     : num 1
  ..$ lineend      : chr "butt"
  ..$ arrow        : logi FALSE
  ..$ inherit.blank: logi TRUE
  ..- attr(*, "class")= chr [1:2] "element_line" "element"
 $ rect                      :List of 5
  ..$ fill         : chr "white"
  ..$ colour       : chr "black"
  ..$ linewidth    : num 0.5
  ..$ linetype     : num 1
  ..$ inherit.blank: logi TRUE
  ..- attr(*, "class")= chr [1:2] "element_rect" "element"
 $ text                      :List of 11
  ..$ family       : chr ""
  ..$ face         : chr "plain"
  ..$ colour       : chr "black"
  ..$ size         : num 11
  ..$ hjust        : num 0.5
  ..$ vjust        : num 0.5
  ..$ angle        : num 0
  ..$ lineheight   : num 0.9
  ..$ margin       : 'margin' num [1:4] 0points 0points 0points 0points
  .. ..- attr(*, "unit")= int 8
  ..$ debug        : logi FALSE
  ..$ inherit.blank: logi TRUE
  ..- attr(*, "class")= chr [1:2] "element_text" "element"
 $ title                     : NULL
 $ aspect.ratio              : NULL
 $ axis.title                : NULL
 $ axis.title.x              :List of 11
  ..$ family       : NULL
  ..$ face         : NULL
  ..$ colour       : NULL
  ..$ size         : NULL
  ..$ hjust        : NULL
  ..$ vjust        : num 1
  ..$ angle        : NULL
  ..$ lineheight   : NULL
  ..$ margin       : 'margin' num [1:4] 2.75points 0points 0points 0points
  .. ..- attr(*, "unit")= int 8
  ..$ debug        : NULL
  ..$ inherit.blank: logi TRUE
  ..- attr(*, "class")= chr [1:2] "element_text" "element"
 $ axis.title.x.top          :List of 11
  ..$ family       : NULL
  ..$ face         : NULL
  ..$ colour       : NULL
  ..$ size         : NULL
  ..$ hjust        : NULL
  ..$ vjust        : num 0
  ..$ angle        : NULL
  ..$ lineheight   : NULL
  ..$ margin       : 'margin' num [1:4] 0points 0points 2.75points 0points
  .. ..- attr(*, "unit")= int 8
  ..$ debug        : NULL
  ..$ inherit.blank: logi TRUE
  ..- attr(*, "class")= chr [1:2] "element_text" "element"
 $ axis.title.x.bottom       : NULL
 $ axis.title.y              :List of 11
  ..$ family       : NULL
  ..$ face         : NULL
  ..$ colour       : NULL
  ..$ size         : NULL
  ..$ hjust        : NULL
  ..$ vjust        : num 1
  ..$ angle        : num 90
  ..$ lineheight   : NULL
  ..$ margin       : 'margin' num [1:4] 0points 2.75points 0points 0points
  .. ..- attr(*, "unit")= int 8
  ..$ debug        : NULL
  ..$ inherit.blank: logi TRUE
  ..- attr(*, "class")= chr [1:2] "element_text" "element"
 $ axis.title.y.left         : NULL
 $ axis.title.y.right        :List of 11
  ..$ family       : NULL
  ..$ face         : NULL
  ..$ colour       : NULL
  ..$ size         : NULL
  ..$ hjust        : NULL
  ..$ vjust        : num 0
  ..$ angle        : num -90
  ..$ lineheight   : NULL
  ..$ margin       : 'margin' num [1:4] 0points 0points 0points 2.75points
  .. ..- attr(*, "unit")= int 8
  ..$ debug        : NULL
  ..$ inherit.blank: logi TRUE
  ..- attr(*, "class")= chr [1:2] "element_text" "element"
 $ axis.text                 :List of 11
  ..$ family       : NULL
  ..$ face         : NULL
  ..$ colour       : chr "grey30"
  ..$ size         : 'rel' num 0.8
  ..$ hjust        : NULL
  ..$ vjust        : NULL
  ..$ angle        : NULL
  ..$ lineheight   : NULL
  ..$ margin       : NULL
  ..$ debug        : NULL
  ..$ inherit.blank: logi TRUE
  ..- attr(*, "class")= chr [1:2] "element_text" "element"
 $ axis.text.x               :List of 11
  ..$ family       : NULL
  ..$ face         : NULL
  ..$ colour       : NULL
  ..$ size         : NULL
  ..$ hjust        : NULL
  ..$ vjust        : num 1
  ..$ angle        : NULL
  ..$ lineheight   : NULL
  ..$ margin       : 'margin' num [1:4] 2.2points 0points 0points 0points
  .. ..- attr(*, "unit")= int 8
  ..$ debug        : NULL
  ..$ inherit.blank: logi TRUE
  ..- attr(*, "class")= chr [1:2] "element_text" "element"
 $ axis.text.x.top           :List of 11
  ..$ family       : NULL
  ..$ face         : NULL
  ..$ colour       : NULL
  ..$ size         : NULL
  ..$ hjust        : NULL
  ..$ vjust        : num 0
  ..$ angle        : NULL
  ..$ lineheight   : NULL
  ..$ margin       : 'margin' num [1:4] 0points 0points 2.2points 0points
  .. ..- attr(*, "unit")= int 8
  ..$ debug        : NULL
  ..$ inherit.blank: logi TRUE
  ..- attr(*, "class")= chr [1:2] "element_text" "element"
 $ axis.text.x.bottom        : NULL
 $ axis.text.y               :List of 11
  ..$ family       : NULL
  ..$ face         : NULL
  ..$ colour       : NULL
  ..$ size         : NULL
  ..$ hjust        : num 1
  ..$ vjust        : NULL
  ..$ angle        : NULL
  ..$ lineheight   : NULL
  ..$ margin       : 'margin' num [1:4] 0points 2.2points 0points 0points
  .. ..- attr(*, "unit")= int 8
  ..$ debug        : NULL
  ..$ inherit.blank: logi TRUE
  ..- attr(*, "class")= chr [1:2] "element_text" "element"
 $ axis.text.y.left          : NULL
 $ axis.text.y.right         :List of 11
  ..$ family       : NULL
  ..$ face         : NULL
  ..$ colour       : NULL
  ..$ size         : NULL
  ..$ hjust        : num 0
  ..$ vjust        : NULL
  ..$ angle        : NULL
  ..$ lineheight   : NULL
  ..$ margin       : 'margin' num [1:4] 0points 0points 0points 2.2points
  .. ..- attr(*, "unit")= int 8
  ..$ debug        : NULL
  ..$ inherit.blank: logi TRUE
  ..- attr(*, "class")= chr [1:2] "element_text" "element"
 $ axis.ticks                :List of 6
  ..$ colour       : chr "grey20"
  ..$ linewidth    : NULL
  ..$ linetype     : NULL
  ..$ lineend      : NULL
  ..$ arrow        : logi FALSE
  ..$ inherit.blank: logi TRUE
  ..- attr(*, "class")= chr [1:2] "element_line" "element"
 $ axis.ticks.x              : NULL
 $ axis.ticks.x.top          : NULL
 $ axis.ticks.x.bottom       : NULL
 $ axis.ticks.y              : NULL
 $ axis.ticks.y.left         : NULL
 $ axis.ticks.y.right        : NULL
 $ axis.ticks.length         : 'simpleUnit' num 2.75points
  ..- attr(*, "unit")= int 8
 $ axis.ticks.length.x       : NULL
 $ axis.ticks.length.x.top   : NULL
 $ axis.ticks.length.x.bottom: NULL
 $ axis.ticks.length.y       : NULL
 $ axis.ticks.length.y.left  : NULL
 $ axis.ticks.length.y.right : NULL
 $ axis.line                 :List of 6
  ..$ colour       : chr "black"
  ..$ linewidth    : 'rel' num 1
  ..$ linetype     : NULL
  ..$ lineend      : NULL
  ..$ arrow        : logi FALSE
  ..$ inherit.blank: logi TRUE
  ..- attr(*, "class")= chr [1:2] "element_line" "element"
 $ axis.line.x               : NULL
 $ axis.line.x.top           : NULL
 $ axis.line.x.bottom        : NULL
 $ axis.line.y               : NULL
 $ axis.line.y.left          : NULL
 $ axis.line.y.right         : NULL
 $ legend.background         :List of 5
  ..$ fill         : NULL
  ..$ colour       : logi NA
  ..$ linewidth    : NULL
  ..$ linetype     : NULL
  ..$ inherit.blank: logi TRUE
  ..- attr(*, "class")= chr [1:2] "element_rect" "element"
 $ legend.margin             : 'margin' num [1:4] 5.5points 5.5points 5.5points 5.5points
  ..- attr(*, "unit")= int 8
 $ legend.spacing            : 'simpleUnit' num 11points
  ..- attr(*, "unit")= int 8
 $ legend.spacing.x          : NULL
 $ legend.spacing.y          : NULL
 $ legend.key                : list()
  ..- attr(*, "class")= chr [1:2] "element_blank" "element"
 $ legend.key.size           : 'simpleUnit' num 1.2lines
  ..- attr(*, "unit")= int 3
 $ legend.key.height         : NULL
 $ legend.key.width          : NULL
 $ legend.text               :List of 11
  ..$ family       : NULL
  ..$ face         : NULL
  ..$ colour       : NULL
  ..$ size         : 'rel' num 0.8
  ..$ hjust        : NULL
  ..$ vjust        : NULL
  ..$ angle        : NULL
  ..$ lineheight   : NULL
  ..$ margin       : NULL
  ..$ debug        : NULL
  ..$ inherit.blank: logi TRUE
  ..- attr(*, "class")= chr [1:2] "element_text" "element"
 $ legend.text.align         : NULL
 $ legend.title              :List of 11
  ..$ family       : NULL
  ..$ face         : NULL
  ..$ colour       : NULL
  ..$ size         : NULL
  ..$ hjust        : num 0
  ..$ vjust        : NULL
  ..$ angle        : NULL
  ..$ lineheight   : NULL
  ..$ margin       : NULL
  ..$ debug        : NULL
  ..$ inherit.blank: logi TRUE
  ..- attr(*, "class")= chr [1:2] "element_text" "element"
 $ legend.title.align        : NULL
 $ legend.position           : chr "right"
 $ legend.direction          : NULL
 $ legend.justification      : chr "center"
 $ legend.box                : NULL
 $ legend.box.just           : NULL
 $ legend.box.margin         : 'margin' num [1:4] 0cm 0cm 0cm 0cm
  ..- attr(*, "unit")= int 1
 $ legend.box.background     : list()
  ..- attr(*, "class")= chr [1:2] "element_blank" "element"
 $ legend.box.spacing        : 'simpleUnit' num 11points
  ..- attr(*, "unit")= int 8
 $ panel.background          :List of 5
  ..$ fill         : chr "white"
  ..$ colour       : logi NA
  ..$ linewidth    : NULL
  ..$ linetype     : NULL
  ..$ inherit.blank: logi TRUE
  ..- attr(*, "class")= chr [1:2] "element_rect" "element"
 $ panel.border              : list()
  ..- attr(*, "class")= chr [1:2] "element_blank" "element"
 $ panel.spacing             : 'simpleUnit' num 5.5points
  ..- attr(*, "unit")= int 8
 $ panel.spacing.x           : NULL
 $ panel.spacing.y           : NULL
 $ panel.grid                :List of 6
  ..$ colour       : chr "grey92"
  ..$ linewidth    : NULL
  ..$ linetype     : NULL
  ..$ lineend      : NULL
  ..$ arrow        : logi FALSE
  ..$ inherit.blank: logi TRUE
  ..- attr(*, "class")= chr [1:2] "element_line" "element"
 $ panel.grid.major          : list()
  ..- attr(*, "class")= chr [1:2] "element_blank" "element"
 $ panel.grid.minor          : list()
  ..- attr(*, "class")= chr [1:2] "element_blank" "element"
 $ panel.grid.major.x        : NULL
 $ panel.grid.major.y        : NULL
 $ panel.grid.minor.x        : NULL
 $ panel.grid.minor.y        : NULL
 $ panel.ontop               : logi FALSE
 $ plot.background           :List of 5
  ..$ fill         : NULL
  ..$ colour       : chr "white"
  ..$ linewidth    : NULL
  ..$ linetype     : NULL
  ..$ inherit.blank: logi TRUE
  ..- attr(*, "class")= chr [1:2] "element_rect" "element"
 $ plot.title                :List of 11
  ..$ family       : NULL
  ..$ face         : NULL
  ..$ colour       : NULL
  ..$ size         : 'rel' num 1.2
  ..$ hjust        : num 0
  ..$ vjust        : num 1
  ..$ angle        : NULL
  ..$ lineheight   : NULL
  ..$ margin       : 'margin' num [1:4] 0points 0points 5.5points 0points
  .. ..- attr(*, "unit")= int 8
  ..$ debug        : NULL
  ..$ inherit.blank: logi TRUE
  ..- attr(*, "class")= chr [1:2] "element_text" "element"
 $ plot.title.position       : chr "panel"
 $ plot.subtitle             :List of 11
  ..$ family       : NULL
  ..$ face         : NULL
  ..$ colour       : NULL
  ..$ size         : NULL
  ..$ hjust        : num 0
  ..$ vjust        : num 1
  ..$ angle        : NULL
  ..$ lineheight   : NULL
  ..$ margin       : 'margin' num [1:4] 0points 0points 5.5points 0points
  .. ..- attr(*, "unit")= int 8
  ..$ debug        : NULL
  ..$ inherit.blank: logi TRUE
  ..- attr(*, "class")= chr [1:2] "element_text" "element"
 $ plot.caption              :List of 11
  ..$ family       : NULL
  ..$ face         : NULL
  ..$ colour       : NULL
  ..$ size         : 'rel' num 0.8
  ..$ hjust        : num 1
  ..$ vjust        : num 1
  ..$ angle        : NULL
  ..$ lineheight   : NULL
  ..$ margin       : 'margin' num [1:4] 5.5points 0points 0points 0points
  .. ..- attr(*, "unit")= int 8
  ..$ debug        : NULL
  ..$ inherit.blank: logi TRUE
  ..- attr(*, "class")= chr [1:2] "element_text" "element"
 $ plot.caption.position     : chr "panel"
 $ plot.tag                  :List of 11
  ..$ family       : NULL
  ..$ face         : NULL
  ..$ colour       : NULL
  ..$ size         : 'rel' num 1.2
  ..$ hjust        : num 0.5
  ..$ vjust        : num 0.5
  ..$ angle        : NULL
  ..$ lineheight   : NULL
  ..$ margin       : NULL
  ..$ debug        : NULL
  ..$ inherit.blank: logi TRUE
  ..- attr(*, "class")= chr [1:2] "element_text" "element"
 $ plot.tag.position         : chr "topleft"
 $ plot.margin               : 'margin' num [1:4] 5.5points 5.5points 5.5points 5.5points
  ..- attr(*, "unit")= int 8
 $ strip.background          :List of 5
  ..$ fill         : chr "white"
  ..$ colour       : chr "black"
  ..$ linewidth    : 'rel' num 2
  ..$ linetype     : NULL
  ..$ inherit.blank: logi TRUE
  ..- attr(*, "class")= chr [1:2] "element_rect" "element"
 $ strip.background.x        : NULL
 $ strip.background.y        : NULL
 $ strip.clip                : chr "inherit"
 $ strip.placement           : chr "inside"
 $ strip.text                :List of 11
  ..$ family       : NULL
  ..$ face         : NULL
  ..$ colour       : chr "grey10"
  ..$ size         : 'rel' num 0.8
  ..$ hjust        : NULL
  ..$ vjust        : NULL
  ..$ angle        : NULL
  ..$ lineheight   : NULL
  ..$ margin       : 'margin' num [1:4] 4.4points 4.4points 4.4points 4.4points
  .. ..- attr(*, "unit")= int 8
  ..$ debug        : NULL
  ..$ inherit.blank: logi TRUE
  ..- attr(*, "class")= chr [1:2] "element_text" "element"
 $ strip.text.x              : NULL
 $ strip.text.x.bottom       : NULL
 $ strip.text.x.top          : NULL
 $ strip.text.y              :List of 11
  ..$ family       : NULL
  ..$ face         : NULL
  ..$ colour       : NULL
  ..$ size         : NULL
  ..$ hjust        : NULL
  ..$ vjust        : NULL
  ..$ angle        : num -90
  ..$ lineheight   : NULL
  ..$ margin       : NULL
  ..$ debug        : NULL
  ..$ inherit.blank: logi TRUE
  ..- attr(*, "class")= chr [1:2] "element_text" "element"
 $ strip.text.y.left         :List of 11
  ..$ family       : NULL
  ..$ face         : NULL
  ..$ colour       : NULL
  ..$ size         : NULL
  ..$ hjust        : NULL
  ..$ vjust        : NULL
  ..$ angle        : num 90
  ..$ lineheight   : NULL
  ..$ margin       : NULL
  ..$ debug        : NULL
  ..$ inherit.blank: logi TRUE
  ..- attr(*, "class")= chr [1:2] "element_text" "element"
 $ strip.text.y.right        : NULL
 $ strip.switch.pad.grid     : 'simpleUnit' num 2.75points
  ..- attr(*, "unit")= int 8
 $ strip.switch.pad.wrap     : 'simpleUnit' num 2.75points
  ..- attr(*, "unit")= int 8
 - attr(*, "class")= chr [1:2] "theme" "gg"
 - attr(*, "complete")= logi TRUE
 - attr(*, "validate")= logi TRUE
game_sales %>% 
  group_by(platform_cat, platform) %>% 
  summarise(total = n()) %>% 
  ggplot(aes(platform_cat, total, fill = platform)) +
  geom_col() +
  geom_text(aes(label = platform))
`summarise()` has grouped output by 'platform_cat'. You can override using the `.groups` argument.

LS0tDQp0aXRsZTogIlIgTm90ZWJvb2siDQpvdXRwdXQ6IGh0bWxfbm90ZWJvb2sNCi0tLQ0KDQpgYGB7cn0NCmxpYnJhcnkodGlkeXZlcnNlKQ0KbGlicmFyeShDb2RlQ2xhbkRhdGEpDQpsaWJyYXJ5KHBsb3RseSkNCg0KZ2FtZV9zYWxlcw0KYGBgDQoNCmBgYHtyfQ0KZ2FtZV9zYWxlcyAlPiUgDQogIGdyb3VwX2J5KHB1Ymxpc2hlciwgeWVhcl9vZl9yZWxlYXNlKSAlPiUgDQogIHN1bW1hcmlzZShudW1fZ2FtZXNfcmVsZWFzZWQgPSBuKCkpICU+JSANCiAgcGxvdF9seSh4ID0gfiB5ZWFyX29mX3JlbGVhc2UsDQogICAgICAgICAgeSA9IH4gbnVtX2dhbWVzX3JlbGVhc2VkLA0KICAgICAgICAgIGNvbG9yID0gfiBwdWJsaXNoZXIsDQogICAgICAgICAgbW9kZSA9ICJsaW5lcyIsIA0KICAgICAgICAgIHRleHQgPSB+IHB1Ymxpc2hlciwNCiAgICAgICAgICBob3ZlcnRlbXBsYXRlID0gJzxiPiV7dGV4dH0nLA0KICAgICAgICAgIHNob3dsZWdlbmQgPSBGKSAlPiUgDQogIGhpZ2hsaWdodChvbiA9ICJwbG90bHlfaG92ZXIiKQ0KYGBgDQoNCmBgYHtyfQ0KZ2FtZV9zYWxlcyAlPiUgDQogIGdyb3VwX2J5KHB1Ymxpc2hlcikgJT4lIA0KICBzdW1tYXJpc2UoYXZnX3JhdGluZyA9IG1lYW4odXNlcl9zY29yZSkpICU+JSANCiAgZ2dwbG90KGFlcyhyZW9yZGVyKHB1Ymxpc2hlciwgLWF2Z19yYXRpbmcpLCBhdmdfcmF0aW5nKSkgKw0KICBnZW9tX2NvbCgpICsNCiAgdGhlbWUoYXhpcy50ZXh0LnggPSBlbGVtZW50X3RleHQoYW5nbGUgPSA0NSwgaGp1c3QgPSAxKSkNCmBgYA0KDQpgYGB7cn0NCmdhbWVfc2FsZXMgJT4lIA0KICBmaWx0ZXIocHVibGlzaGVyID09ICJBY3RpdmlzaW9uIikgJT4lIA0KICBncm91cF9ieShuYW1lKSAlPiUgDQogIHN1bW1hcmlzZSh1c2VyX3Njb3JlID0gbWVhbih1c2VyX3Njb3JlKSwNCiAgICAgICAgICAgIGNyaXRpY19zY29yZSA9IG1lYW4oY3JpdGljX3Njb3JlKS8xMCkgJT4lIA0KICBhcnJhbmdlKGRlc2ModXNlcl9zY29yZSkpICU+JSANCiAgc2xpY2VfaGVhZChuID0gMTApICU+JSANCiAgZ2dwbG90KCkgKw0KICBnZW9tX2NvbChhZXMoeCA9IHJlb3JkZXIobmFtZSwgdXNlcl9zY29yZSksIHkgPSB1c2VyX3Njb3JlKSwgcG9zaXRpb24gPSAiZG9kZ2UiLCBmaWxsID0gImRhcmtvbGl2ZWdyZWVuNCIpICsNCiAgZ2VvbV9wb2ludChhZXMoeCA9IG5hbWUsIHkgPSBjcml0aWNfc2NvcmUpLCBwb3NpdGlvbiA9ICJkb2RnZSIsIGNvbG91ciA9ICJicm93bjQiKSArDQogIHRoZW1lKGF4aXMudGV4dC54ID0gZWxlbWVudF90ZXh0KGFuZ2xlID0gNDUsIGhqdXN0ID0gMSkpDQpgYGANCg0KYGBge3J9DQpnYW1lX3NhbGVzICU+JSANCiAgZmlsdGVyKHB1Ymxpc2hlciA9PSAiTmludGVuZG8iKSAlPiUgDQogIGdyb3VwX2J5KG5hbWUpICU+JSANCiAgc3VtbWFyaXNlKHVzZXJfc2NvcmUgPSBtZWFuKHVzZXJfc2NvcmUpLA0KICAgICAgICAgICAgY3JpdGljX3Njb3JlID0gbWVhbihjcml0aWNfc2NvcmUpLzEwKSAlPiUgDQogIGFycmFuZ2UoZGVzYyh1c2VyX3Njb3JlKSkgJT4lIA0KICBzbGljZV9oZWFkKG4gPSAxMCkgJT4lIA0KICBwaXZvdF9sb25nZXIodXNlcl9zY29yZTpjcml0aWNfc2NvcmUsIG5hbWVzX3RvID0gIlJldmlld2VyIiwgdmFsdWVzX3RvID0gInNjb3JlIikgJT4lIA0KICBnZ3Bsb3QoKSArDQogIGdlb21fY29sKGFlcyh4ID0gcmVvcmRlcihuYW1lLCAtc2NvcmUpLCB5ID0gc2NvcmUsIGZpbGwgPSBSZXZpZXdlciksDQogICAgICAgICAgIHBvc2l0aW9uID0gImRvZGdlIiwNCiAgICAgICAgICAgI2ZpbGwgPSAibGF2ZW5kZXJibHVzaDIiDQogICkgKw0KICAjIGdlb21fcG9pbnQoYWVzKHggPSBuYW1lLCB5ID0gY3JpdGljX3Njb3JlKSwNCiAgIyAgICAgICAgICAgICNwb3NpdGlvbiA9ICJkb2RnZSIsDQogICMgICAgICAgICAgICBjb2xvdXIgPSAiZGVlcHBpbmsyIikgKw0KICB0aGVtZShheGlzLnRleHQueCA9IGVsZW1lbnRfdGV4dChhbmdsZSA9IDQ1LCBoanVzdCA9IDEpLA0KICAgICAgICBwYW5lbC5ncmlkID0gZWxlbWVudF9ibGFuaygpKSArDQogIGxhYnMoDQogICAgdGl0bGUgPSAiVG9wIDEwIEdhbWVzIFJlbGVhc2VkIGJ5IFNlbGVjdGVkIFB1Ymxpc2hlciIsDQogICAgeCA9ICIiLA0KICAgIHkgPSAiUmF0aW5nIg0KICApDQpgYGANCg0KDQoNCg0KYGBge3J9DQpnYW1lX3NhbGVzICU+JSANCiAgZ3JvdXBfYnkocHVibGlzaGVyKSAlPiUgDQogIHN1bW1hcmlzZSh0b3RhbF9nYW1lcyA9IG4oKSkgJT4lIA0KICBnZ3Bsb3QoYWVzKHJlb3JkZXIocHVibGlzaGVyLCAtdG90YWxfZ2FtZXMpLCB0b3RhbF9nYW1lcykpICsNCiAgZ2VvbV9jb2woKSArDQogIHRoZW1lKGF4aXMudGV4dC54ID0gZWxlbWVudF90ZXh0KGFuZ2xlID0gNDUsIGhqdXN0ID0gMSkpDQpgYGANCg0KYGBge3J9DQpnYW1lX3NhbGVzICU+JSANCiAgZ3JvdXBfYnkocHVibGlzaGVyLCBwbGF0Zm9ybSkgJT4lIA0KICBzdW1tYXJpc2UodG90YWxfZ2FtZXMgPSBuKCkpICU+JSANCiAgZ2dwbG90KGFlcyhwdWJsaXNoZXIsIHRvdGFsX2dhbWVzLCBmaWxsID0gcGxhdGZvcm0pKSArDQogIGdlb21fY29sKCkgKw0KICB0aGVtZShheGlzLnRleHQueCA9IGVsZW1lbnRfdGV4dChhbmdsZSA9IDQ1LCBoanVzdCA9IDEpKQ0KYGBgDQoNCmBgYHtyfQ0KZ2FtZV9zYWxlcyA8LSBnYW1lX3NhbGVzICU+JSANCiAgbXV0YXRlKHBsYXRmb3JtX2NhdCA9IGNhc2Vfd2hlbigNCiAgICBzdHJfZGV0ZWN0KHBsYXRmb3JtLCAiUFMiKSB+ICJQbGF5c3RhdGlvbiIsDQogICAgc3RyX2RldGVjdChwbGF0Zm9ybSwgIlgiKSB+ICJYYm94IiwNCiAgICBzdHJfZGV0ZWN0KHBsYXRmb3JtLCAiV2lpIikgfiAiTmludGVuZG8gV2lpIiwNCiAgICBzdHJfZGV0ZWN0KHBsYXRmb3JtLCAiR0MiKSB+ICJOaW50ZW5kbyBHYW1lY3ViZSIsDQogICAgc3RyX2RldGVjdChwbGF0Zm9ybSwgIkdCIikgfiAiTmludGVuZG8gR2FtZSBCb3kiLA0KICAgIHN0cl9kZXRlY3QocGxhdGZvcm0sICJEUyIpIH4gIk5pbnRlbmRvIERTIiwNCiAgICAuZGVmYXVsdCA9IHBsYXRmb3JtDQogICkpDQpgYGANCg0KYGBge3J9DQpnYW1lX3NhbGVzICU+JSANCiAgZ3JvdXBfYnkocHVibGlzaGVyLCBwbGF0Zm9ybV9jYXQpICU+JSANCiAgc3VtbWFyaXNlKHRvdGFsX2dhbWVzID0gbigpKSAlPiUgDQogIGdncGxvdChhZXMocmVvcmRlcihwdWJsaXNoZXIsIC10b3RhbF9nYW1lcywgc3VtKSwgdG90YWxfZ2FtZXMsIGZpbGwgPSBwbGF0Zm9ybV9jYXQpKSArDQogIGdlb21fY29sKCkgKw0KICB0aGVtZShheGlzLnRleHQueCA9IGVsZW1lbnRfdGV4dChhbmdsZSA9IDQ1LCBoanVzdCA9IDEpKSArDQogIHNjYWxlX2ZpbGxfbWFudWFsKHZhbHVlcyA9IGMoDQogICAgIlhib3giID0gImRhcmtncmVlbiIsDQogICAgIlBsYXlzdGF0aW9uIiA9ICJibHVlIiwNCiAgICAiTmludGVuZG8gR2FtZWN1YmUiID0gInJlZDEiLA0KICAgICJOaW50ZW5kbyBEUyIgPSAicmVkMiIsDQogICAgIk5pbnRlbmRvIFdpaSIgPSAicmVkMyIsDQogICAgIk5pbnRlbmRvIEdhbWUgQm95IiA9ICJyZWQ0IiwNCiAgICAiUEMiID0gImJsYWNrIikNCiAgKQ0KYGBgDQojIEdhbWVzIGJ5IHB1Ymxpc2hlcg0KYGBge3J9DQpjb2xvdXJfc2NoZW1lIDwtIGMoDQogICJYYm94IiA9ICJkYXJrZ3JlZW4iLA0KICAiUGxheXN0YXRpb24iID0gImJsdWUiLA0KICAiTmludGVuZG8gR2FtZWN1YmUiID0gInJlZDEiLA0KICAiTmludGVuZG8gRFMiID0gInJlZDIiLA0KICAiTmludGVuZG8gV2lpIiA9ICJyZWQzIiwNCiAgIk5pbnRlbmRvIEdhbWUgQm95IiA9ICJyZWQ0IiwNCiAgIlBDIiA9ICJibGFjayIpDQoNCmdhbWVfc2FsZXMgJT4lIA0KICBncm91cF9ieShwdWJsaXNoZXIsIHBsYXRmb3JtX2NhdCkgJT4lIA0KICBzdW1tYXJpc2UodG90YWxfZ2FtZXMgPSBuKCkpICU+JSANCiAgcGxvdF9seSh5ID0gfiByZW9yZGVyKHB1Ymxpc2hlciwgdG90YWxfZ2FtZXMsIHN1bSksDQogICAgICAgICAgeCA9IH4gdG90YWxfZ2FtZXMsDQogICAgICAgICAgY29sb3IgPSB+IHBsYXRmb3JtX2NhdCwNCiAgICAgICAgICBjb2xvcnMgPSBjb2xvdXJfc2NoZW1lLA0KICAgICAgICAgIHR5cGUgPSAiYmFyIg0KICApICU+JSANCiAgbGF5b3V0KGJhcm1vZGUgPSAic3RhY2siLA0KICAgICAgICAgdGl0bGUgPSAiTnVtYmVyIG9mIEdhbWVzIFJlbGVhc2VkIGJ5IFB1Ymxpc2hlciBBY3Jvc3MgRWFjaCBQbGF0Zm9ybSIsDQogICAgICAgICB5YXhpcyA9IGxpc3QodGl0bGUgPSAiIiksDQogICAgICAgICB4YXhpcyA9IGxpc3QodGl0bGUgPSAiTnVtYmVyIG9mIEdhbWVzIHJlbGVhc2VkIikNCiAgKQ0KYGBgDQoNCmBgYHtyfQ0KZ2FtZV9zYWxlcyAlPiUgDQogIGZpbHRlcihwdWJsaXNoZXIgPT0gIk1pZHdheSBHYW1lcyIpICU+JSANCiAgZ3JvdXBfYnkoeWVhcl9vZl9yZWxlYXNlKSAlPiUgDQogIHN1bW1hcmlzZSh0b3RhbF9nYW1lcyA9IG4oKSkgJT4lIA0KICBnZ3Bsb3QoYWVzKHllYXJfb2ZfcmVsZWFzZSwgdG90YWxfZ2FtZXMpKSArDQogIGdlb21fbGluZSgpICsNCiAgdGhlbWVfY2xhc3NpYygpDQpgYGANCg0KYGBge3J9DQpnYW1lX3NhbGVzIDwtIGdhbWVfc2FsZXMgJT4lIA0KICBtdXRhdGUoDQogICAgcGxhdGZvcm1fY2F0ID0gZmFjdG9yKA0KICAgICAgY2FzZV93aGVuKA0KICAgICAgICBzdHJfZGV0ZWN0KHBsYXRmb3JtLCAiUFMiKSB+ICJQbGF5c3RhdGlvbiIsDQogICAgICAgIHN0cl9kZXRlY3QocGxhdGZvcm0sICJYIikgfiAiWGJveCIsDQogICAgICAgIHN0cl9kZXRlY3QocGxhdGZvcm0sICJXaWl8R0N8R0J8RFMiKSB+ICJOaW50ZW5kbyIsDQogICAgICAgIC5kZWZhdWx0ID0gcGxhdGZvcm0NCiAgICAgICkNCiAgICApDQogICkNCg0KZ2FtZV9zYWxlcyAlPiUgDQogIGZpbHRlcihwdWJsaXNoZXIgPT0gIkFjdGl2aXNpb24iKSAlPiUgDQogIGdyb3VwX2J5KHllYXJfb2ZfcmVsZWFzZSwgcGxhdGZvcm1fY2F0LCAuZHJvcCA9IEZBTFNFKSAlPiUgDQogIHN1bW1hcmlzZSh0b3RhbF9nYW1lc19wbGF0ID0gbigpKSAlPiUgDQogIHVuZ3JvdXAoKSAlPiUgDQogIGdyb3VwX2J5KHllYXJfb2ZfcmVsZWFzZSkgJT4lIA0KICBtdXRhdGUodG90YWxfZ2FtZXMgPSBzdW0odG90YWxfZ2FtZXNfcGxhdCkpICU+JSANCiAgZ2dwbG90KCkgKw0KICBnZW9tX2xpbmUoYWVzKHllYXJfb2ZfcmVsZWFzZSwgdG90YWxfZ2FtZXNfcGxhdCwgY29sb3VyID0gcGxhdGZvcm1fY2F0KSkgKw0KICBnZW9tX3BvaW50KGFlcyh5ZWFyX29mX3JlbGVhc2UsIHRvdGFsX2dhbWVzX3BsYXQsIGNvbG91ciA9IHBsYXRmb3JtX2NhdCkpKw0KICBnZW9tX2xpbmUoYWVzKHllYXJfb2ZfcmVsZWFzZSwgdG90YWxfZ2FtZXMsIGNvbG91ciA9ICJUb3RhbCIpKSArDQogIGdlb21fcG9pbnQoYWVzKHllYXJfb2ZfcmVsZWFzZSwgdG90YWxfZ2FtZXMsIGNvbG91ciA9ICJUb3RhbCIpKSArDQogIHRoZW1lX2NsYXNzaWMoKQ0KYGBgDQoNCg0KDQpgYGB7cn0NCmdhbWVfc2FsZXMgJT4lIA0KICBncm91cF9ieShwbGF0Zm9ybV9jYXQsIHBsYXRmb3JtKSAlPiUgDQogIHN1bW1hcmlzZSh0b3RhbCA9IG4oKSkgJT4lIA0KICBnZ3Bsb3QoYWVzKHBsYXRmb3JtX2NhdCwgdG90YWwsIGZpbGwgPSBwbGF0Zm9ybSkpICsNCiAgZ2VvbV9jb2woKSArDQogIGdlb21fdGV4dChhZXMobGFiZWwgPSBwbGF0Zm9ybSkpDQpgYGANCg0K